package com.itheima.sh.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.ResourceBundle;

/*
    工具类特点：
    1.位于util包
    2.静态方法
    3.私有化构造方法
 */
public class JDBCUtils01 {
    //成员变量
    private static String url = null;
    //  user：连接数据库的用户名 root
    private static String user = null;
    //  password：连接数据库密码 1234
    private static String password = null;

    //定义静态代码块
    static {
        try {
            //1.创建属性集对象
//            Properties p = new Properties();
            //2.使用p对象调用load方法加载
            //使用类加载器
//            InputStream is = JDBCUtils01.class.getClassLoader().getResourceAsStream("jdbc.properties");
//            p.load(JDBCUtils01.class.getClassLoader().getResourceAsStream("jdbc.properties"));
            //ResourceBundle 类只能读取后缀名是.properties文件
            ResourceBundle rb = ResourceBundle.getBundle("jdbc");//这里书写文件名
            url = rb.getString("url");
            user = rb.getString("user");
            password = rb.getString("password");
//            p.load();
            //对于基本流FileInputStream中书写的文件是相对路径相对是项目根目录
//            p.load(new FileInputStream("src\\jdbc.properties"));
            //地址
//            url = p.getProperty("url");//dbc:mysql://localhost:3306/day06_113
//            //用户名
//            user = p.getProperty("user");
//            //密码
//            password = p.getProperty("password");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 3.私有化构造方法
    private JDBCUtils01() {
    }

    // 2.静态方法
    //定义静态方法让外界获取连接
    public static Connection getConnection() throws Exception {
        // url：表示连接数据库的地址。

        Connection conn = DriverManager.getConnection(url, user, password);
        //将连接返回给调用者
        return conn;
    }

    //定义静态方法优化释放资源
    public static void release(Connection conn, Statement st, ResultSet rs) {
        //6.释放资源
        try {
            //判断是否为空
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            //判断是否为空
            if (st != null) {
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            //判断是否为空
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}
